package com.ruoyi.eqmonitor.dispose.resolve;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ruoyi.eqmonitor.dtos.OptDeviceDto;
import com.ruoyi.eqmonitor.utils.Constant;
import lombok.extern.slf4j.Slf4j;

import java.util.Date;

/**
 * 设备最后在线时间 处理类
 */
@Slf4j
@Deprecated
//@Component
public class LastTimeResolve implements MqttMessageResolve {

    @Override
    public boolean support(int msgType) {
        // 参数 或 监测 数据
        return Constant.MqttMsgType.PARAMETER.getCode() == msgType || Constant.MqttMsgType.MONITOR_DATA.getCode() == msgType;
    }

    /**
     * 解析处理
     * @param snCode 设备编码
     * @param messageArray 消息
     */
    @Override
    public boolean resolve(String snCode, OptDeviceDto optDevice, JSONArray messageArray) {
        // 获取到最新的时间
        Date date = messageArray.stream()
                .map(LastTimeResolve::getDate)
                .filter(ObjectUtil::isNotNull)
                .max(DateUtil::compare)
                .orElse(null);
        // TODO 处理

        return true;
    }

    public static Date getDate(Object obj) {
        JSONObject jsonObject = JSONUtil.parseObj(obj);
        // 参数数据时间参数
        Date tempDate =  jsonObject.getDate("updateTime");

        // 监测数据时间参数
        if (tempDate == null) {
            tempDate = jsonObject.getDate("monitorTime");
        }
        return tempDate;
    }
}
